Desafio

Você foi alocado(a) em um time da Indicium que está trabalhando atualmente junto a um cliente no processo de criação de uma plataforma de aluguéis temporários na cidade de Nova York. Para o desenvolvimento de sua estratégia de precificação, pediu para que a Indicium fizesse uma análise exploratória dos dados de seu maior concorrente, assim como um teste de validação de um modelo preditivo.

Seu objetivo é desenvolver um modelo de previsão de preços a partir do dataset oferecido, e avaliar tal modelo utilizando as métricas de avaliação que mais fazem sentido para o problema. O uso de outras fontes de dados além do dataset é permitido (e encorajado). Você poderá encontrar em anexo um dicionário dos dados.

Dicionário dos dados

A base de dados de treinamento contém 16 colunas. Seus nomes são auto-explicativos, mas, caso haja alguma dúvida, a descrição das colunas é:

id – Atua como uma chave exclusiva para cada anúncio nos dados do aplicativo nome - Representa o nome do anúncio host_id - Representa o id do usuário que hospedou o anúncio host_name – Contém o nome do usuário que hospedou o anúncio bairro_group - Contém o nome do bairro onde o anúncio está localizado bairro - Contém o nome da área onde o anúncio está localizado latitude - Contém a latitude do local longitude - Contém a longitude do local room_type – Contém o tipo de espaço de cada anúncio price - Contém o preço por noite em dólares listado pelo anfitrião minimo_noites - Contém o número mínimo de noites que o usuário deve reservar numero_de_reviews - Contém o número de comentários dados a cada listagem ultima_review - Contém a data da última revisão dada à listagem reviews_por_mes - Contém o número de avaliações fornecidas por mês calculado_host_listings_count - Contém a quantidade de imóveis por host disponibilidade_365 - Contém o número de dias em que o anúncio está disponível para reserva

1. Faça uma análise exploratória dos dados (EDA), demonstrando as principais características entre as variáveis e apresentando algumas hipóteses de negócio relacionadas. Seja criativo!

Importando pacotes

Abrindo o arquivo

Verificando quantidade de registros e atributos. (16 - 1 é atributo alvo: price)

Verificando os tipos de dados

Olhando para as estatísticas

Olhando para os 10 últimos registros

Olhando para os 10 primeiros registros

Verificar os NANS

Dados ausentes com ISNA

Dados ausentes com ISNULL

Porcentagem de dados ausentes do atributo NOME com nan

Porcentagem de dados ausentes do atributo HOST_NAME com nan

20% de reviews_por_mes e ultima_review são dados ausentes

Verificando se review_por_mes e ultima_review tem distribuição normal. Como vemos nos gráficos a distribuição não é normal. Nesse caso substitui-se os valores ausentes pela mediana. Se fosse uma distribuição normal, os valores ausentes seriam substituido pela média. A média ou a mediana devem ser calculadas sem os valores ausentes.

Removendo os valores ausentes do calculo da mediana

Calculando a mediana

Substituindo os valores ausentes

Preenchendo os NANS da data com um valor 0

Verificando a frequencia das datas

Removendo todos os registros em que data é igual a 0000-00-00.

Agora posso converter essas datas em date time

Calculando a mediana das datas que agora são consideradas como série temporais

Agora posso substituir todas as datas 0000-00-00 pela data encontrada pela mediana

Agora vamos separar mês, dia e ano em novas colunas

Verificando os tipos de dados e atributos com o novo dataframe

Dia, mês e ano estão como OBJECT, precisamos converter para inteiro

Também vamos converter a ultima_review para data

Conferindo

Plotando um gráfico para cada atributo

Calculando agora as frequencias por ano, dia e mes

Quais são os nomes de anúncios?

Quais são os bairros?

Quais são os tipos de apartamento?

Quantos apartamentos tem cada host?

Quantos anuncios tem cada host em cada grupo de bairros?

Quantos anuncios tem cada host em cada bairros?

Qual é o número médio "mínimo de noites" por tipo de apartamento?

Quais são os tipos de apartamentos com alugueis mais caros e os mais baratos? E em quais bairros estão localizados?

Quais são os bairros com o maior e menor número de reviews? colocar o 'bairro_group',

Quais são os anuncios com o maior e menor número de reviews? Em que bairro estão?

Quais são os anuncios (nome) por bairro? 'bairro_group'

Qual é o preço máximo e mínimo?

Qual o preço médio do aluguel (por noite) por bairro?

Quanto ganha por noite cada host em média? E por ano?

Qual anuncio tem a disponibilidade mais alta e qual a mais baixa?

Qual a disponibilidade média por bairro?

Qual o preço médio do aluguel por grupo de bairro?

Qual a disponibilidade média (dada por dia) por grupo de bairro?

Qual é a média de preço para cada tipo de apartamento?

Qual a disponibilidade média (dada por dia) por tipo de apartamento?

Um apartamento com alta disponibilidade (por dia) rende mais que um apartamento com baixa disponibilidade? Vamos considerar a média como um ponto de referencia.

Qual a média de dias de disponibilidade?

E para cada anuncio?

Selecionando os 10 bairros mais caros

Selecionando os 10 anuncios mais caros

Selecionando os 10 anuncios (atributo nome) mais caros por group bairro

Selecionando os 10 anuncios (nome) mais caros por group bairro

Quais atributos tem dependências com outros?

Algumas possibilidades:

a) price e room_type

b) price e minimo_noites

c) price e disponibilidade_365

d) price e bairro

e) price e bairro_group

f) numero_de_reviews e reviews_por_mes

Calcular: covariância, correlação e determinação.

CORRELAÇÃO

O valor 1.0 indica alta correlação e ele aparece na diagonal pois é onde os atributos cruzam com eles mesmos. Na correlação, a variabilidade de uma variável pode ser explicada pela variação de outra variável. Neste case, podemos concluir que a correlação entre os atributos selecionados são baixas, isto é, há pouca relação entre eles.

COVARIÂNCIA

Descobrimos com a covariância se existe alguma relação entre as variáveis.

Se o resultado for maior que zero então significa que existe uma dependência entre os atributos. Neste caso, quanto maior a variável1 maior também a variável2.

Se o resultado for menor que zero, também há dependência. Daí indica que quanto menor a variável 1, menor a variável 2.

Se o resultado for igual a zero, então as variáveis são independentes.

Em nosso case a covariância é positiva, indicando que quanto maior a variável1 maior também a variável2.

COEFICIENTE DE DETERMINAÇÃO

Se o resultado for ~1, mais a primeira variável explica a segunda

Se o resultado for ~0, menos a primeira variável (atributo) explica a segunda, isto é, uma porcentagem da segunda variável pode ser explicada pela primeira.

Os valores obtidos para este dataset são mais próximos de zero do que de um, portanto, um atributo não explica muito bem os outros atributos.

b) price e minimo_noites

c) price e disponibilidade_365

a) price e room_type

d) price e bairro

e) price e bairro_group

f) numero_de_reviews e reviews_por_mes

Existe algum padrão no texto do nome do local para lugares de mais alto valor? Podemos usar processamento de linguagem natural pra isso.

Aparentemente, nos 10 bairros mais caros, essas são as palavras envolvidas que podem indicar o porque do valor ser mais alto nesses bairros comparados à outros. LOFT definitivamente diz muito sobre o imóvel e geralmente esse tipo costuma mesmo ter um alto valor.

Explique como você faria a previsão do preço a partir dos dados.

Para responder a estas perguntas teremos de selecionar atributos que realmente são relevantes para a predição. Este é um caso de REGRESSÃO, isto é, precisamos predizer um valor contínuo. Nem todos os atributos de entrada servirão para este propósito. Analisando cada atributo:

Sem conversão de tipos podemos usar id, host_id, latitude, longitue, minimo_noites, numero_de_reviews, reviews_por_mes, disponibilidade_365. Os atributos room_type, bairro_group e bairro tem que ser convertidos.

Vamos criar um novo dataframe que conterá apenas os atributos de interesse

Usando validação cruzada de 10 folds

O modelo de regressão logística teve um melhor desempenho que o modelo de árvore de decisão. Seria necessário fazer um tunning mais profundo de parametros, para se chegar a resultados de desempenho melhores. Eu escolhi esses modelos por eles serão os básico e padrões. Os outros modelos tentei executar, mas meu computador é muito velho e não deu conta.

A R2 é a melhor medida pois tem um valor mais baixo que o dos outros modelos, já que para modelos de regressão, quanto menor o valor do resultado, melhor. De qualquer forma, o modelo não conseguiu predizer alguns valores. Infelizmente ainda não sei muito sobre regressão e, portanto, não consigo dar muitos insights a respeito.